package com.atomone.epublib.base;

import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

import com.atomone.epublib.R;
import com.atomone.epublib.utils.StatusBarCompat;

import butterknife.ButterKnife;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;

/**
 * @author liyayun
 */
public abstract class BaseActivity extends AppCompatActivity {

    private static final int INVALID_VAL = -1;

    protected CompositeDisposable mDisposable;

    protected Toolbar mToolbar;

    /**
     * 布局文件
     */
    @LayoutRes
    protected abstract int getContentId();

    /**
     * 配置Toolbar
     */
    protected abstract void setUpToolbar(Toolbar toolbar);

    /**
     * 初始化数据
     */
    protected abstract void initData(Bundle savedInstanceState);

    /**
     * 初始化零件
     */
    protected abstract void initView();

    /**
     * 初始化点击事件
     */
    protected abstract void initClick();

    /**
     * 逻辑使用区
     */
    protected abstract void processLogic();

    /*************************lifecycle area*****************************************************/

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentId());
        ButterKnife.bind(this);
        initToolbar();
        initView();
        initData(savedInstanceState);
        initClick();
        processLogic();
    }

    private void initToolbar() {
        //更严谨是通过反射判断是否存在Toolbar
        mToolbar = ButterKnife.findById(this, R.id.toolbar);
        if (mToolbar != null) {
            supportActionBar(mToolbar);
            setUpToolbar(mToolbar);
        }
    }

    protected void addDisposable(Disposable d) {
        if (mDisposable == null) {
            mDisposable = new CompositeDisposable();
        }
        mDisposable.add(d);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mDisposable != null) {
            mDisposable.dispose();
        }
    }

    /**************************used method area*******************************************/

    protected ActionBar supportActionBar(Toolbar toolbar) {
        setSupportActionBar(toolbar);
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setDisplayShowHomeEnabled(true);
        }
        mToolbar.setNavigationOnClickListener(v -> finish());
        return actionBar;
    }


    protected void setStatusBarColor(int statusColor) {
        StatusBarCompat.compat(this, this.getResources().getColor(statusColor));
    }
}
